package cn.itcast.day01.demo04;
/*
对于 功能类似 的方法来说，因为参数不一样，却需要那么多个不同的方法名称，太麻烦了！！

方法重载（Overload），多个方法名称相同， 参数列表 不一样！！
好处：只需要记住一个方法名称，我就可以实现类似的多个功能

方法重载与下列因素相关
1、参数 个数 不同
2、参数 类型 不同
3、参数的 多类型顺序 不同

方法重载和下列因素无关：
1、 与 参数的名称 无关
2、 与方法 返回值类型 无关
 */
public class Demo01MethodOverload {
    public static void main(String[] args) {
//        System.out.println(sumTwo(10,20));
//        System.out.println(sumThree(10,20,30));
//        System.out.println(sumFour(10,20,30,40));

        System.out.println(sum(30,12));
        System.out.println(sum(30,12,1));
        System.out.println(sum(30,12,1,2));
//谁能对得上就调用谁，对不上就报错
    }

    /*
    重载 把下面的名称都统一为sum
     */

    //两个数相加
    public static int sum(int a,int b){
        System.out.println("两个参数的方法被执行");
        return a + b;
    }

//    //与方法的返回值无关！！ 错误写法与int 方法冲突
      //原因 因为 如果是  psvm中 sum单独调用，用无返回值的方法调用 无法进行区分
//    public static double sum(int a,int b){
//        System.out.println("两个参数的方法被执行");
//        return a + b +0.0;
//    }

//    //与 参数的名称无关  错误写法！！
//    public static int sum(int x,int y){
//        System.out.println("两个参数的方法被执行");
//        return x + y;
//    }

    //参数类型不同
    public static int sum(double a,double b){
        System.out.println("两个参数的方法被执行");
        return (int)(a+b);
    }

    //1号、2号 是参数的 多类型 不同
    //1号
    public static int sum(int a,double b){
        System.out.println("两个参数的方法被执行");
        return (int)(a+b);
    }

    //2号
    public static int sum(double a,int b){
        System.out.println("两个参数的方法被执行");
        return (int)(a+b);
    }





    //三个数相加
    public static int sum(int a,int b,int c){
        System.out.println("三个参数的方法被执行");
        return a + b + c;
    }
    //四个数相加
    public static int sum(int a,int b,int c,int d){
        System.out.println("四个参数的方法被执行");
        return a + b + c + d;
    }

}
